#define  _CRT_SECURE_NO_WARNINGS

#include <assert.h>
#include <stdio.h>

size_t my_strlen(char* p)
{
	if (*p == '\0')
	{
		return 0;
	}
	else
	{
		return 1 + my_strlen(p+1);

	}
}

char* my_strcpy(char* dest,const char* str)
{
	assert(dest && str);
	char* cur = dest;
	while (*dest++ = *str++)
	{
		;
	}
	return cur;
}

int my_strcmp(const char* str1,const char* str2)
{

	while (*str1 == *str2)
	{
		if (*str1 == '\0')
			return 0;
		str1++;
		str2++;
	}
	return *str1 - *str2;
}

char* my_strcat(char* str1, const char* str2)
{
	assert(str2);

	char* cur = str1;
	while (*str1)
	{
		str1++;
	}
	while (*str2)
	{
		*str1 = *str2;
		str1++;
		str2++;
	}
	return cur;
}

char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);

	const char* cur = str1;
	const char* s1 = NULL;
	const char* s2 = NULL;
	if (*str2 == '\0');
	{
		return (char*)str1;
	}
	while (*cur)
	{
		s1 = cur;
		s2 = str2;
		while (*s1==*s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return (char*)cur;
		}
		cur++;
	}
	return NULL;
}

int main()
{
	char arr1[20] ="msdh";
	char arr2[] = "abcdef";
	//printf("%s", my_strcpy(arr1,arr2));
	printf("%s", my_strcat(arr1, arr2));

	//size_t ret = my_strlen(arr2);
	//printf("%zd ", ret);
}